package com.link.base.base.orgnization.service;

import com.link.base.base.orgnization.model.LinkTable;
import com.link.base.base.orgnization.model.Orgnization;
import com.link.base.ext.emp.model.ExtEmployee;
import com.link.core.basic.model.CallParam;
import com.link.core.basic.service.BasicService;

import java.util.List;

/**
 * @author unknown
 * @date unknown
 * @comments 组织服务
 */
public interface OrgnizationService extends BasicService<Orgnization> {

    /**
     * 查询根组织
     * @param entity 组织
     * @return 组织
     * @throws Exception
     */
    public Orgnization queryRoot(Orgnization entity) throws Exception;

    /**
     * 查询组织列表表排除主键为Id的组织和其子组织
     * @param entity 组织
     * @return 组织列表
     * @throws Exception
     */
    public List<Orgnization> queryListRemoveIdAndChildrenPage(Orgnization entity) throws Exception;

    /**
     * 根据根组织查询组织树
     * @param entity 组织
     * @throws Exception
     */
    public void queryTreeByRoot(Orgnization entity) throws Exception;

    /**
     * 根据根组织查询组织树
     * @param entity 组织
     * @throws Exception
     */
    public void queryTreeByRoot1(Orgnization entity) throws Exception;

    /**
     * 根据ID递归删除该记录以及其子对象
     * @param entity 组织
     * @throws Exception
     */
    public void deleteWithChildById(Orgnization entity) throws Exception;

    /**
     * 存储过程更新CX_PT_BU_LV
     *
     * @param record
     * @throws Exception
     */
    public void getRunOrgUpdate(CallParam record) throws Exception;

    /**
     * 查询组织中的所有公司
     *
     * @param entity
     * @return 组织列表
     * @throws Exception
     */
    public List<Orgnization> queryCompanyInOrgnizationSelect(Orgnization entity) throws Exception;

    /**
     * 更新企点部门ID
     *
     * @param orgId    组织ID
     * @param qdDeptId 企点部门ID
     * @throws Exception
     */
    public void qdDeptIdUpdate(Long orgId, Long qdDeptId) throws Exception;

    /**
     * 查询联系人的组织
     * @author huanglongjian
     * @param entity 组织
     * @return 组织列表
     * @throws Exception
     */
    public List<Orgnization> queryOrgByContactId(Orgnization entity) throws Exception;

    /**
     * 查询联系人的组织
     * @author huanglongjian
     * @param entity 组织
     * @return 组织列表
     * @throws Exception
     */
    public List<Orgnization> queryOrgByAccountId(Orgnization entity) throws Exception;

    /**
     * java版本的更新组织架构
     * @author yangxiaolin
     * @date 2018/11/11 11:11
     * @param callParam
     * @throws Exception
     */
    public void getRunOrgUpdateNoCall(CallParam callParam) throws Exception;

    /**
     * 新版更新组织、部门、职位架构
     *
     * @author LiYang
     * @date 2019/12/12
     * @throws Exception
     */
    public void runOrgUpdateNew(String orgType) throws Exception;

    /**
     * 拿到数据库所有表的表相关内容
     *
     * @author yangxiaolin
     * @date 2019/03/11 15:24
     * @param entity
     */
    public List<LinkTable> queryTableInfoList(LinkTable entity) throws Exception;

    /**
     * 拿到数据库某表的所有列相关内容
     *
     * @author yangxiaolin
     * @date 2019/03/11 15:24
     * @param entity
     */
    List<LinkTable> queryColInfoListByTableName(LinkTable entity) throws Exception;

    /**
     * 更新数据库某表的某字段，合并组织架构使用
     *
     * @author yangxiaolin
     * @date 2019/03/11 15:24
     * @param entity
     */
    public void saveCombineOrg(LinkTable entity) throws Exception;

    /**
     * 通过orgId找到所属以及一级子公司
     *
     * @author NingLanhao
     * @date 2019-03-27 14:30
     * @param entity
     * @return com.link.business.base.orgnization.model.Orgnization
     */
    Orgnization queryCompanyByOrgId(Orgnization entity) throws Exception;

    /**
     * 获取组织树，其中树包含根结点，且只含有有效的组织
     * @author 姚江漪
     * @date 2019/05/14 10:19
     */
    public void queryTreeByRoot2(Orgnization entity) throws Exception;

    /**
     * 通过组织id和组织类型，获取上级或下级组织信息
     * @author 秦学刚
     * @date 2019/04/30 01:16
     * @param orgnization
     */

    public List<Orgnization> queryTierOrgnization(Orgnization orgnization) throws Exception;

    /**
     * 查询唯一的组织(组织编码)
     * @param orgnization
     * @return
     */
    Orgnization queryUniqueShrOrgnization(Orgnization orgnization);

    /**
     * 根据SHR父组织ID查询组织
     * @param orgnization
     * @return
     */
    Orgnization queryUniqueShrParOrgnization(Orgnization orgnization);

    /**
     * 更新来自ESB数据
     * @param orgnization
     */
    void updateForEsb(Orgnization orgnization);

    /**
     * 根据SHR部门ID获取组织数据
     * @author 刘启鑫
     * @date 2020/8/22 17:45
     */
    Orgnization queryEmpOrgnizationByEmp(ExtEmployee employee);

    /**
     * 设置默认的父组织
     *
     * @author 刘启鑫
     * @date 2020/8/25 15:33
     */
    void setDefaultParOrgnization(Orgnization orgnization) throws Exception;

}
